/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package occho.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import occho.model.Pregunta;
import occho.model.Respuesta;
import occho.model.Tema;

/**
 *
 * @author migue
 */
public class OraclePreguntaDAO implements PreguntaDAO {

    private Connection conn = null;

    /**
     * Constructor de la clase
     * @param conn
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public OraclePreguntaDAO(Connection conn) throws SQLException, ClassNotFoundException {
        this.conn = conn;
    }

    @Override
    public boolean insertarPregunta(Pregunta pre, Tema tem) throws SQLException {
        PreparedStatement stmt = conn.prepareStatement("insert into pregunta (idPregunta, enunciado, idtema) values(seq_pregunta.nextval, ?, ?)");
        stmt.clearParameters();
        //stmt.setInt(1, asig.getIdAsignatura());
        stmt.setString(1, pre.getEnunciado());
        stmt.setInt(2, tem.getIdTema());
        if (stmt.executeUpdate() > 0) {
            stmt.close();
            return true;
        } else {
            stmt.close();
            return false;
        }
    }

    @Override
    public boolean borrarPregunta(Pregunta pre) throws SQLException {
        PreparedStatement stmt = conn.prepareStatement("delete from pregunta where idPregunta = ?");
        stmt.clearParameters();
        stmt.setInt(1, pre.getIdPregunta());
        if (stmt.executeUpdate() > 0) {
            stmt.close();
            return true;
        } else {
            stmt.close();
            return false;
        }
    }

    @Override
    public Pregunta seleccionarPregunta(int idPregunta) throws SQLException, ClassNotFoundException {
        Pregunta p = null;
        PreparedStatement stmt = conn.prepareStatement("select * from pregunta where idPregunta = ?");
        stmt.clearParameters();
        stmt.setInt(1, idPregunta);
        ResultSet rs = stmt.executeQuery();
        if (rs.next()) {
            OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
            RespuestaDAO respuestaDAO = daoFactory.getRespuestaDAO();
            List<Respuesta> respuestas = respuestaDAO.seleccionarRespuestas(idPregunta);
            p = new Pregunta(rs.getInt("idPregunta"), rs.getString("enunciado"), respuestas);
        } 
        rs.close();
        stmt.close();
        return p;
    }

    @Override
    public List<Pregunta> seleccionarPreguntas() throws SQLException, ClassNotFoundException {
        OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
        RespuestaDAO preguntaDAO = daoFactory.getRespuestaDAO();
        Pregunta pre;
        ArrayList<Pregunta> preguntas = new ArrayList<Pregunta>();
        PreparedStatement stmt = conn.prepareStatement("select * from pregunta");
        stmt.clearParameters();
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
            pre = new Pregunta();
            pre.setIdPregunta(rs.getInt("idPregunta"));
            pre.setEnunciado(rs.getString("enunciado"));
            pre.setRespuestas(preguntaDAO.seleccionarRespuestas(rs.getInt("idPregunta")));
            preguntas.add(pre);
        }
        rs.close();
        stmt.close();
        return preguntas;
    }

    @Override
    public List<Pregunta> seleccionarPreguntas(Tema tema) throws SQLException, ClassNotFoundException {
        Pregunta pre;
        OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
        RespuestaDAO preguntaDAO = daoFactory.getRespuestaDAO();
        ArrayList<Pregunta> preguntas = new ArrayList<Pregunta>();
        PreparedStatement stmt = conn.prepareStatement("select * from pregunta where idTema = ?");
        stmt.clearParameters();
        stmt.setInt(1, tema.getIdTema());
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {
            pre = new Pregunta();
            pre.setIdPregunta(rs.getInt("idPregunta"));
            pre.setEnunciado(rs.getString("enunciado"));
            pre.setRespuestas(preguntaDAO.seleccionarRespuestas(rs.getInt("idPregunta")));
            preguntas.add(pre);
        }
        rs.close();
        stmt.close();
        return preguntas;
    }

    @Override
    public Tema seleccionarTema(Pregunta pre) throws SQLException, ClassNotFoundException {
        Tema t = null;
        PreparedStatement stmt = conn.prepareStatement("select * from pregunta where idpregunta = ?");
        stmt.clearParameters();
        stmt.setInt(1, pre.getIdPregunta());
        ResultSet rs = stmt.executeQuery();
        if (rs.next()) {
            OracleDAOFactory daoFactory = OracleDAOFactory.getInstancia();
            TemaDAO temaDAO = daoFactory.getTemaDAO();
            t = new Tema();
            t.setIdTema(rs.getInt("idtema"));
            t = temaDAO.seleccionarTema(t);
        } 
        rs.close();
        stmt.close();
        return t;
    }

}
